Skip to content

Sync Paradigm Centaur upstream through #1089 - #79

Merged
GoonMachine merged 31 commits into
mainfrom
codex/upstream-sync-20260715
Jul 15, 2026
Merged

Sync Paradigm Centaur upstream through #1089#79
GoonMachine merged 31 commits into
mainfrom
codex/upstream-sync-20260715

Conversation

@fineas-bot

@fineas-bot fineas-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown

Summary

  • Merge paradigmxyz/centaur through 373e92c (upstream PRs fix: support non-rotating Slack OAuth tokens paradigmxyz/centaur#1088 and docs: clarify cron weekday numbering paradigmxyz/centaur#1089 included).
  • Preserve TipLink migration lineage, Fineas subject-only principal JWTs, exact-channel private Slack authorization, ambient/rich Slack routing, and local workflow-host credential isolation.
  • Adopt upstream Console-owned Granola sync and retire the deleted legacy Python workflow test.
  • Resolve the new private Slack migration as TipLink 0046, including immutable checksums and executable RLS coverage.
  • Keep CodeQL out of scope; inherited upstream CodeQL findings are not a gate for this sync.

Fineas goals preserved

  • DEV-5288: public search remains an overlay/public-token concern; private upload/download/history remains principal JWT + exact-channel authorization. The real bot token is not added to an agent path here.
  • DEV-5331: the legacy direct-Postgres self-debugger is not restored. Subject-only API JWTs and scoped sandbox entitlement JWTs remain available for upstream-native diagnostics without inventing another credential lane.
  • Existing ambient-channel, channel-default reasoning, workflow task-token, company-context, Airtable, Slack, and retention behavior has regression coverage.

Validation

  • cargo test --workspace
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • SQLx migrator and RLS suites against ParadeDB/Postgres 16
  • Rails: 1,264 tests, 0 failures
  • Slackbot: typecheck + 208 pass, 1 intentional skip
  • Workflow Python: 58 pass; workflow host: 12 pass
  • Focused sandbox/tools/system-prompt Python: 72 pass + 48 sandbox unit tests
  • Helm lint + overlay image compatibility test
  • RuboCop: 317 files, 0 offenses; Brakeman: 0 warnings
  • Migration order/checksum validation, docs source/public parity, and git diff --check

Deployment gate — source merge only

Do not deploy this PR through the ordinary overlapping rolling path yet. Migration 0046 renames live slack_dm_* relations and synchronously rebuilds both BM25 indexes. Old API pods and already-running sandboxes can still reference the old names, and the prior image is not a functional rollback after the rename.

Before rollout:

  • rehearse a zero-overlap migration/cutover with production-scale data and an existing-sandbox plan;
  • verify the private Slack OAuth credential is the nested human xoxp token and no OAuth-generated xoxb wrapper is granted to an agent/channel role;
  • inventory Console automation API keys for the new active-admin owner requirement;
  • verify Console host/SSO settings before public exposure.

This PR changes source only and does not mutate the live deployment.

akshaan and others added 30 commits July 13, 2026 20:08
fix(slackbotv2): support scoped trigger bot ids

Co-authored-by: Perry Dime <260989497+svc-paradigm@users.noreply.github.com>
* fix: allow hosted MCP OAuth redirects

* test: update MCP redirect rejection case
* feat: sync Granola via user OAuth

* fix: satisfy Granola sync CI checks
* feat: expose sandbox permission query

* fix: expose console URL to sandboxes

* refactor: clarify sandbox console URL wiring

* fix: require explicit API server proxy hosts

* chore: bump chart version to 0.1.99

* fix: require configured sandbox entitlement host
* feat: project Granola notes into context

* test: provision Granola RLS source table

* test: provision Granola RLS identity helpers
* feat: harden console public login

* refactor: simplify console SSO domain parsing

* chore: bump chart version
* feat: ingest private Slack channels from OAuth

* fix: remove private channel membership expiry

* refactor: rename private Slack tables
Closes paradigmxyz#1068

Co-authored-by: Derek Cofausper <256792747+decofe@users.noreply.github.com>
Closes paradigmxyz#1040

Co-authored-by: Anđelo Kandić <andelo.kandic@gmail.com>
* fix: support non-rotating Slack OAuth tokens

* fix: preserve Slack OAuth token expiry semantics
Record the zero-overlap deployment requirement for the relation-renaming private Slack migration.
end

def parse_meetings(text)
text.to_s.scan(MEETING_RE).filter_map do |id, title, date, body|
secret.build_source(source_type: "token_broker", config: { "credential_id" => credential.oid })
secret.rules.build(host: "www.googleapis.com", position: 0)
secret.save!
Grant.create!(principal: @proxy.principal, static_secret: secret, created_by: users(:acme_admin))
@GoonMachine
GoonMachine merged commit e7a5c08 into main Jul 15, 2026
36 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants